# -*- coding: utf-8 -*-
#
# File: SIGFSTool.py
#
# Copyright (c) 2006 by IBICT
# Generator: ArchGenXML Version 1.5.0
#            http://plone.org/products/archgenxml
#
# GNU General Public License (GPL)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
#

__author__ = """IBICT <cadu@ibict.br>"""
__docformat__ = 'plaintext'

from AccessControl import ClassSecurityInfo
from Products.Archetypes.atapi import *
from Products.Archetypes.SQLStorage import *
from Products.SIGFS.config import *


from Products.CMFCore.utils import UniqueObject

    
##code-section module-header #fill in your manual code here
from SOAPpy.WSDL import Proxy
import xml.dom.minidom as parser
##/code-section module-header

schema = Schema((

    LinesField(
        name='vocab_tipo_reuniao',
        default=['1;Ordinária','2;Extraordinária'],
        widget=LinesWidget(
            label="Lista de Tipos de Reunião",
            label_msgid='SIGFS_label_vocab_tipo_reuniao',
            i18n_domain='SIGFS',
        )
    ),

    LinesField(
        name='vocab_agencia',
        default=['1;Nenhum','2;CNPQ','3;FINEP'],
        widget=LinesWidget(
            label="Lista de Agências",
            label_msgid='SIGFS_label_vocab_agencia',
            i18n_domain='SIGFS',
        )
    ),

    LinesField(
        name='vocab_tipo',
        default=['1;Criar Termo de Referência','2;Criar Edital','3;Acompanhar o julgamento do Edital','4;Acompanhar ação proposta','5;Criar Documento Básico','6;Criar Regimento Interno','7;Criar Relatório Anual de Atividades','8;Criar Estudos Prospectivos','9;Criar Relatório de Avaliação de Projetos','10;Criar Plano Plurianual de Investimentos','11;Criar Notas Técnicas'],
        widget=LinesWidget(
            label="Lista de Tipos de Atividades",
            label_msgid='SIGFS_label_vocab_tipo',
            i18n_domain='SIGFS',
        )
    ),

    LinesField(
        name='vocab_categoria',
        default=['1;Documento Básico','2;Regimento Interno','3;Relatório Anual de Atividades','4;Estudos Prospectivos','5;Relatório de Avaliação de Projetos','6;Plano Plurianual de Investimentos','7;Notas Técnicas'],
        widget=LinesWidget(
            label="Lista de Categorias de Documentos Técnicos",
            label_msgid='SIGFS_label_vocab_categoria',
            i18n_domain='SIGFS',
        )
    ),

    LinesField(
        name='vocab_instrumento',
        default=['1;Chamada Pública','2;Encomenda','3;Carta Convite'],
        widget=LinesWidget(
            label="Lista de Instrumentos do Termo de Referência",
            label_msgid='SIGFS_label_vocab_instrumento',
            i18n_domain='SIGFS',
        )
    ),

    LinesField(
        name='vocab_categoria_documento',
        default=['1;Constituição Federal','2;Decretos','3;Leis','4;Medidas Provisórias','5;Outros Atos','6;Pareceres e Notas','7;Portarias','8;Portarias Interministeriais','9;Documento de Diretrizes Básicas','10;Documentos de Base','11;Estudos Técnicos','12;Regimento Interno'],
        widget=LinesWidget(
            label="Lista de Categorias de Documentos",
            label_msgid='SIGFS_label_vocab_categoria_documento',
            i18n_domain='SIGFS',
        )
    ),

    LinesField(
        name='vocab_estado_workflow',
        default=['1;Estado do Workflow do Portal','2;Aguardando decisão da diretoria na Agência','3;Decisão da Diretoria da Agência','4;Em processo de contratação','5;Projeto contratado'],
        widget=LinesWidget(
            label="Lista de Estados em que o Instrumento pode se Encontrar.",
            label_msgid='SIGFS_label_vocab_estado_workflow',
            i18n_domain='SIGFS',
        )
    ),

    LinesField(
        name='vocab_eixo',
        default=['1;Consolidação e expansão do sistema nacional de CT&I','2;Apoio à poliítica industrial, tecnológica e de comércio exterior – PITCE','3;Objetivos estratégicos nacionais','4;C&T para inclusão e desenvolvimento social'],
        widget=LinesWidget(
            label="Lista dos Eixos do plano estratégico do MCT.",
            label_msgid='SIGFS_label_vocab_eixo',
            i18n_domain='SIGFS',
        )
    ),

    LinesField(
        name='vocab_fundo',
        default=['0;Nenhum','1;CT-Aeronáutico','2;CT-Agronegócio','3;CT-Amazônia','4;CT-Biotecnologia','5;CT-Energ','6;CT-Espacial','7;CT-Hidro','8;CT-Info','9;CT-Infra','10;CT-Mineral','11;CT-Petro','12;CT-Saúde','13;CT-Transporte','14;CT-Transporte Aquaviário e de Construção Naval','15;CT-Verde-Amarelo','16;CT-Funttel'],
        widget=LinesWidget(
            label="Lista dos Comitês Gestores representados pelos Fundos Setoriais.",
            label_msgid='SIGFS_label_vocab_fundo',
            i18n_domain='SIGFS',
        )
    ),

    LinesField(
        name='vocab_secretaria',
        default=['1;Nenhuma','2;Secretaria Executiva','3;Gabinete do Ministro','4;Secretaria de Políticas e Programas de Pesquisa e de Desenvolvimento – SEPED','5;Secretaria de Política de Informática – SEPIN','6;Secretaria de Desenvolvimento Tecnológico e Inovação – SETEC','7;Secretaria de ciência e tecnologia para inclusão social - SECIS'],
        widget=LinesWidget(
            label="Lista das Secretarias do MCT.",
            label_msgid='SIGFS_label_vocab_secretaria',
            i18n_domain='SIGFS',
        )
    ),

    LinesField(
        name='vocab_nivel',
        default=['1;Agrupador Nivel 1','2;Agrupador Nível 2'],
        widget=LinesWidget(
            label="Lista de Níveis do Agrupador de Ações",
            label_msgid='SIGFS_label_vocab_nivel',
            i18n_domain='SIGFS',
        )
    ),

    LinesField(
        name='vocab_entidade',
        default=['1;Nenhum','2;Academia Brasileira de Ciências - ABC','3;Associação Nacional dos Dirigentes das Instituições Federais de Ensino Superior - ANDIFES','4;Centro de Gestão e Estudos Estratégicos - CGEE','5;Comissões de Conselho Nacional de Ciência e Tecnologia - CCT','6;Confederação Nacional da Industria - CNI','7;Conselho de Reitores das Universidades Estaduais Paulistas - CRUESP','8;Fórum das Fundações de Amparo a Pesquisa - FAP','9;Forúm de Secretários Estaduais de C&T - CONSETI','10;Sociedade Brasileira para o Progresoo da Ciência - SBPC','11;Subsecretaria de Coordenação das Unidades de Pesquisa - SCUP/SEXEC/MCT'],
        widget=LinesWidget(
            label="Lista de Entidades proponente da Ação",
            label_msgid='SIGFS_label_vocab_entidade',
            i18n_domain='SIGFS',
        )
    ),

),
)

##code-section after-local-schema #fill in your manual code here
##/code-section after-local-schema

SIGFSTool_schema = BaseSchema.copy() + \
    schema.copy()

##code-section after-schema #fill in your manual code here
##/code-section after-schema

class SIGFSTool(UniqueObject, BaseContent):
    """
    """
    security = ClassSecurityInfo()
    __implements__ = (getattr(UniqueObject,'__implements__',()),) + (getattr(BaseContent,'__implements__',()),)

    # This name appears in the 'add' box
    archetype_name = 'Ferramenta SIGFS'

    meta_type = 'SIGFSTool'
    portal_type = 'SIGFSTool'
    allowed_content_types = []
    filter_content_types = 0
    global_allow = 0
    content_icon = 'form_icon.gif'
    immediate_view = 'base_view'
    default_view = 'base_view'
    suppl_views = ()
    typeDescription = "Ferramenta SIGFS"
    typeDescMsgId = 'description_edit_sigfstool'
    #toolicon = 'SIGFSTool.gif'

    _at_rename_after_creation = True

    schema = SIGFSTool_schema

    ##code-section class-header #fill in your manual code here
    ##/code-section class-header


    # tool-constructors have no id argument, the id is fixed
    def __init__(self, id=None):
        BaseContent.__init__(self,'portal_sigfs')
        self.setTitle('Ferramenta SIGFS')
        
        ##code-section constructor-footer #fill in your manual code here
        ##/code-section constructor-footer


    # tool should not appear in portal_catalog
    def at_post_edit_script(self):
        self.unindexObject()
        
        ##code-section post-edit-method-footer #fill in your manual code here
        ##/code-section post-edit-method-footer


    # Methods

    # Manually created methods

    def getProjeto(self, txt='', pc='', di='', df='', ne='', ac=''):
        """Retorna com os valores do projeto buscado"""
        p = Proxy('http://scf-informatica.no-ip.com:7080/SIGFSWebService/SIGFSWebService.jws?wsdl')
        xml ='''
        <parametros>
          <metodo>Buscar Projetos</metodo>
          <texto>%s</texto>
          <palavra-chave>%s</palavra-chave>
          <data-inicio>%s</data-inicio>
          <data-fim>%s</data-fim>
          <numero-edital>%s</numero-edital>
          <area-conhecimento>%s</area-conhecimento>
        </parametros>''' % (txt, pc, di, df, ne, ac)

        return p.processRequest(xml=xml).encode('utf-8')

    def getSubacao(self, nm='', an='', pi='', fs=''):
        """Retorna com os valores da subação buscada"""
        p = Proxy('http://200.130.9.9/mctsigfsws/SIGFSWebService.jws?wsdl')

        xml ='''
        <parametros>
          <metodo>Buscar Sub-acao</metodo>
          <login-subacao>73667367846</login-subacao>
          <senha-subacao>0ooggcyuuv3vg3gygcgg3gffg0g0o03y3guvgcgc</senha-subacao>
          <nome-subacao>%s</nome-subacao>
          <ano-subacao>%s</ano-subacao>
          <pi>%s</pi>
          <fsId>%s</fsId>
        </parametros>''' % (nm, an, pi, fs)

        return p.processRequest(xml=xml).encode('utf-8')

    def parseXMLProjeto(self, xmlfile):
        """Retorna um dicionário do XML parseado"""
        document = parser.parseString(xmlfile)
        result = []

        for pj in document.getElementsByTagName('projeto'):
          tree = {}
          for element in ['nome', 'fundo-setorial', 'numero-edital', 'agencia', 'instituicao', 'modalidade', 'setor-produtivo', 'area-conhecimento', 'resumo']:
            tree[element] = pj.getElementsByTagName(element)[0].childNodes[0].data
          for element in pj.getElementsByTagName('pesquisador'):
            subtree = {}
            for subelement in ['nome-pesquisador', 'email-pesquisador']:
              subtree[subelement] = element.getElementsByTagName(subelement)[0].childNodes[0].data
            tree['pesquisador'] = subtree
          result.append(tree)

        return result

    def getPesquisador(self, nm='', cd=''):
        """Retorna com os valores da instituição buscada"""
        p = Proxy('http://scf-informatica.no-ip.com:7080/SIGFSWebService/SIGFSWebService.jws?wsdl')
        xml ='''
        <parametros>
          <metodo>Buscar Pesquisador</metodo>
          <nome>%s</nome>
          <codigo>%s</codigo>
        </parametros>''' % (nm, cd)

        return p.processRequest(xml=xml).encode('utf-8')

    def parseXML(self, xmlfile):
        """Retorna um dicionário do XML parseado"""
        document = parser.parseString(xmlfile)
        result = []

        for sa in document.getElementsByTagName('sub-acao'):
          tree = {}
          for element in ['nome-subacao', 'eixo', 'recurso1', 'recurso2', 'recurso3']:
            tree[element] = sa.getElementsByTagName(element)[0].childNodes[0].data
          for element in sa.getElementsByTagName('fundo-setorial'):
            subtree = {}
            for subelement in ['nome', 'nome-acao', 'plano-interno', 'recurso-executado', 'recurso-fisico', 'recurso-financeiro']:
              subtree[subelement] = element.getElementsByTagName(subelement)[0].childNodes[0].data
            tree['fundo-setorial'] = subtree
          result.append(tree)

        return result

    def extractDictionary(self, dictionary):
       """Eval"""
       return eval(dictionary)

    def getCategoriasDocumento(self):
        """Retorna a lista de Categorias do Documento."""
        portal_sigfs = getToolByName(self, 'portal_sigfs')
        result = []
        vocabulary = self.getVocab_categoria_documento()

        for item in vocabulary:
            parts = item.split(';')
            result.append([parts[0], parts[1]])
        return result

    def getInstituicao(self, uf='', nm='', tp='', sg='', cd=''):
        """Retorna com os valores da instituição buscada"""
        p = Proxy('http://sucupira.ibict.br:10087/ibictsigfsws/SIGFSWebService.jws?wsdl')
        xml ='''
        <parametros>
          <metodo>Buscar Instituicao</metodo>
          <uf>%s</uf>
          <nome>%s</nome>
          <tipo>%s</tipo>
          <sigla>%s</sigla>
          <codigo>%s</codigo>
        </parametros>''' % (uf, nm, tp, sg, cd)

        return p.processRequest(xml=xml).encode('utf-8')

    def parseXMLInstituicao(self, xmlfile):
        """Retorna um dicionário do XML parseado"""
        document = parser.parseString(xmlfile)
        result = []

        for inst in document.getElementsByTagName('instituicao'):
          tree = {}
          for element in ['nome', 'sigla', 'email', 'idPai', 'tipo']:
            tree[element] = inst.getElementsByTagName(element)[0].childNodes[0].data
          result.append(tree)

        return result

    def parseXMLPesquisador(self, xmlfile):
        """Retorna um dicionário do XML parseado"""
        document = parser.parseString(xmlfile)
        result = []

        for ps in document.getElementsByTagName('pesquisador'):
          tree = {}
          for element in ['nome', 'cpf', 'email']:
            tree[element] = ps.getElementsByTagName(element)[0].childNodes[0].data
          result.append(tree)

        return result



registerType(SIGFSTool, PROJECTNAME)
# end of class SIGFSTool

##code-section module-footer #fill in your manual code here
##/code-section module-footer



